/**
 * 
 */
package com.nari.baseinfo.service;

import java.util.List;
import java.util.Map;

import com.nari.baseinfo.dao.IConcentratorDao;
import com.nari.baseinfo.model.IConcentrator;
import com.nari.coreframe.service.IGenericService;
import com.nari.platform.model.PageCond;
import com.nari.platform.model.ResponseMsg;
import com.nari.platform.model.ResultWithPageCond;

/**
 * 
 * @author Xiaopeng
 * @date 2013-8-1
 */
public interface IConcentratorService extends IGenericService<IConcentrator, String> {

	/**
	 * 分页查询集中器信息
	 * @param projectUID 所属项目ID(可选)
	 * @param communityUID 所属小区ID(可选)
	 * @param concentratorNo 集中器号(可选)
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-15
	 */
	public ResultWithPageCond<IConcentrator> queryConcentratorPage(String projectUID, 
			String communityUID, String concentratorNo, PageCond pageCond) throws Exception;
	
	/**
	 * 通过集中器列表查询与其对应的小区id-communityName映射表
	 * @param concentratorList
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-15
	 */
	public Map<String, String> queryReferCommunityMap(List<IConcentrator> concentratorList) throws Exception;
	
	/**
	 * 通过集中器列表查询与之关联的行政机构ID-机构名称映射表
	 * @param projectList 集中器列表，若列表为空，则返回空的映射表
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-7
	 */
	public Map<String, String> queryReferCitysByConcentratorList(List<IConcentrator> concentratorList) 
			throws Exception;
	
	/**
	 * 通过集中器所属关系（所属项目、所属小区、所属分摊域）查询集中器列表
	 * 若所属关系均不存在，则返回空列表
	 * @param projectUID 所属项目
	 * @param communityUID 所属小区
	 * @param shareAreaUID 所属分摊域
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-27
	 */
	public List<IConcentrator> queryConcentratorsByBelongs(String projectUID, 
			String communityUID, String shareAreaUID) throws Exception;
	
	/**
	 * 通过集中器号查询集中器实体
	 * @param concentratorNo
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-2
	 */
	public IConcentrator queryByConcentratorNo(String concentratorNo) throws Exception;
	
	/**
	 * 根据所属分摊域信息查询集中器信息
	 * @param shareAreaUID 所属分摊域(必选)
	 * 说明：若分摊域ID不存在，则返回零结果集
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param concentratorNo 集中器号(可选)
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-3
	 */
	public ResultWithPageCond<IConcentrator> queryConcentratorPageByAreaUID(String shareAreaUID, 
			String projectUID, String communityUID, String concentratorNo, 
			PageCond pageCond) throws Exception;
	
	/**
	 * 查询不隶属于某个分摊域下的集中器列表
	 * @param shareAreaUID 所属分摊域(必选)
	 * 说明：若分摊域ID不存在，则返回零结果集
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param concentratorNo 集中器号(可选)
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-3
	 */
	public ResultWithPageCond<IConcentrator> queryConcentratorPageExceptAreaUID(String shareAreaUID, 
			String projectUID, String communityUID, String concentratorNo, 
			PageCond pageCond) throws Exception;
	
	/**
	 * 批量设置集中器所属分摊域信息
	 * @param shareAreaUID 所属分摊域
	 * @param concentratorIDList 集中器ID列表，格式：XXX,XXX,XXX
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-3
	 */
	public ResponseMsg saveConcentratorArea(String shareAreaUID, 
			String concentratorIDList) throws Exception;
	
	/**
	 * 将存储格式的上传周期格式化为数值型的上传周期
	 * @param uploadCycle
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-23
	 */
	public int formatUploadCycle(String uploadCycle) throws Exception;
	
	/**
	 * 通过集中器所属信息统计集中器的个数
	 * @param projectUID
	 * @param communityUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-10-23
	 */
	public int countConcentratorSumByBelongs(String projectUID, 
			String communityUID) throws Exception;
	
	/**
	 * 根据集中器UID级联删除关联信息
	 * 包括：分配表、温度点
	 * @param concentratorUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-5-8
	 */
	public ResponseMsg deleteCascadeByConcentratorUID(String concentratorUID) throws Exception;
	
	/**
	 * 统计相同集中器号的集中器数量，避免系统录入相同集中器号的集中器信息
	 * @param concentratorNo
	 * @param concentratorUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-7-23
	 */
	public int countByConcentratorNo(String concentratorNo, String concentratorUID) throws Exception;

	public abstract ResultWithPageCond<IConcentrator> queryConcentratorPage(String projectUID, String communityUID,
			String buildingUID, String concentratorNo, PageCond pageCond) throws Exception;
}
